#!/bin/bash

# 开发环境测试脚本
echo "=== 开发环境部署测试 ==="

# 检查Docker是否运行
if ! docker info > /dev/null 2>&1; then
    echo "❌ Docker未运行，请先启动Docker"
    exit 1
fi

echo "✅ Docker运行正常"

# 检查配置文件
echo "📋 检查配置文件..."

# 检查开发环境配置文件
if [ ! -f ".env.dev" ]; then
    echo "❌ 开发环境配置文件 .env.dev 不存在"
    exit 1
fi

if [ ! -f "docker-compose.dev.yml" ]; then
    echo "❌ docker-compose.dev.yml不存在"
    exit 1
fi

echo "✅ 使用开发环境配置文件 .env.dev"

if [ ! -f "nginx/nginx.conf" ]; then
    echo "❌ nginx配置文件不存在"
    exit 1
fi

echo "✅ 配置文件检查完成"

# 启动开发环境服务
echo "🚀 启动开发环境..."
docker-compose -f docker-compose.dev.yml down -v

# 清理可能存在的网络冲突
echo "🔧 清理Docker网络..."
docker network prune -f

# 检查并清理可能冲突的网络
if docker network ls | grep -q "plant_dev_network"; then
    echo "⚠️  发现已存在的 plant_dev_network，尝试清理..."
    docker network rm plant_dev_network 2>/dev/null || true
fi

# 构建并启动开发环境
docker-compose -f docker-compose.dev.yml --env-file .env.dev up --build -d
# 等待服务启动
echo "⏳ 等待服务启动..."
sleep 60

# 检查网络状态
echo "🌐 检查Docker网络..."
if docker network ls | grep -q "plant_dev_network"; then
    echo "✅ plant_dev_network 网络已创建"
    docker network inspect plant_dev_network --format='{{.Name}}: {{.Driver}}'
else
    echo "❌ plant_dev_network 网络未找到"
    echo "📋 当前网络列表:"
    docker network ls
    exit 1
fi

# 检查后端是否完全启动
echo "🔍 检查后端启动状态..."
for i in {1..30}; do
    if docker-compose -f docker-compose.dev.yml logs backend | grep -q "Starting development server\|Watching for file changes\|启动开发服务器"; then
        echo "✅ 后端开发服务器启动完成"
        break
    fi
    if [ $i -eq 30 ]; then
        echo "❌ 后端启动超时，查看日志："
        docker-compose -f docker-compose.dev.yml logs backend --tail=20
        exit 1
    fi
    sleep 2
done

# 检查前端是否完全启动
echo "🔍 检查前端启动状态..."
for i in {1..30}; do
    if docker-compose -f docker-compose.dev.yml logs frontend | grep -q "ready\|Ready\|started\|Local:"; then
        echo "✅ 前端开发服务器启动完成"
        break
    fi
    if [ $i -eq 30 ]; then
        echo "❌ 前端启动超时，查看日志："
        docker-compose -f docker-compose.dev.yml logs frontend --tail=20
        exit 1
    fi
    sleep 2
done

# 检查服务状态
echo "📊 检查服务状态..."
docker-compose -f docker-compose.dev.yml ps

# 检查容器网络连接
echo "🔗 检查容器网络连接..."
for service in backend frontend db redis; do
    if docker-compose -f docker-compose.dev.yml ps | grep -q "$service.*Up"; then
        container_name=$(docker-compose -f docker-compose.dev.yml ps -q $service)
        if [ ! -z "$container_name" ]; then
            network_info=$(docker inspect $container_name --format='{{range $net, $config := .NetworkSettings.Networks}}{{$net}} {{end}}')
            echo "✅ $service: $network_info"
        fi
    else
        echo "❌ $service: 未运行"
    fi
done

# 测试各个端点
echo "🧪 测试各个端点..."

# 等待服务完全启动
sleep 10

# 测试前端开发服务器
if curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 | grep -q "200\|301\|302"; then
    echo "✅ 前端开发服务器正常 (端口3000)"
else
    echo "❌ 前端开发服务器访问失败"
fi

# 测试后端开发服务器
if curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/api/auth/institutions/ | grep -q "200\|401\|403"; then
    echo "✅ 后端开发服务器正常 (端口8000)"
else
    echo "❌ 后端开发服务器访问失败"
fi

# 测试数据库连接
if docker-compose -f docker-compose.dev.yml exec -T db mysqladmin ping -h localhost -u root -proot123456 > /dev/null 2>&1; then
    echo "✅ 数据库连接正常"
else
    echo "❌ 数据库连接失败"
fi

# 测试Redis连接
if docker-compose -f docker-compose.dev.yml exec -T redis redis-cli ping | grep -q "PONG"; then
    echo "✅ Redis连接正常"
else
    echo "❌ Redis连接失败"
fi

# 检查热重载功能
echo "🔥 检查热重载功能..."
echo "   前端热重载: 修改前端代码应该自动重新编译"
echo "   后端热重载: 修改后端代码应该自动重启服务"

echo ""
echo "=== 开发环境测试完成 ==="
echo "🌐 开发环境访问地址:"
echo "   前端: http://localhost:3000"
echo "   后端API: http://localhost:8000"
echo "   Admin后台: http://localhost:8000/admin/"
echo "   数据库: localhost:3306"
echo "   Redis: localhost:6379"
echo ""
echo "🔍 网络信息:"
docker network inspect plant_dev_network --format='{{.Name}}: {{len .Containers}} 个容器连接'
echo ""
echo "📝 开发调试命令:"
echo "   查看实时日志: docker-compose -f docker-compose.dev.yml logs -f [service]"
echo "   重启服务: docker-compose -f docker-compose.dev.yml restart [service]"
echo "   进入容器: docker-compose -f docker-compose.dev.yml exec [service] bash"
echo "   停止服务: docker-compose -f docker-compose.dev.yml down"
echo ""
echo "🛠️ 开发提示:"
echo "   - 代码修改会自动触发热重载"
echo "   - 数据库数据持久化在 mysql_dev_data 卷中"
echo "   - 静态文件挂载在 dev_static_volume 卷中"